/*******************************************************************************
* Copyright (c) 2010-2013, istvanrath, Istvan Rath and Daniel Varro
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* istvanrath - initial API and implementation
*******************************************************************************/
package org.eclipse.incquery.runtime.rete.collections.hppc;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.eclipse.incquery.runtime.rete.collections.CollectionsFactory;
import com.carrotsearch.hppc.ObjectObjectOpenHashMap;
import com.carrotsearch.hppc.cursors.ObjectObjectCursor;
/**
* @author istvanrath
* WORK IN PROGRESS - doesn't work yet.
*/
public class HPPCHashMap<K, V> implements Map<K, V> {
ObjectObjectOpenHashMap<K, V> internal = new ObjectObjectOpenHashMap<K, V>();
/*
* (non-Javadoc)
*
* @see java.util.Map#values()
*/
@Override
public Collection<V> values() {
return Arrays.asList(internal.values);
}
/*
* (non-Javadoc)
*
* @see java.util.Map#entrySet()
*/
@Override
public Set<java.util.Map.Entry<K, V>> entrySet() {
//HPPCHashSet<java.util.Map.Entry<K, V>> r = new HPPCHashSet<Map.Entry<K,V>>();
Set<java.util.Map.Entry<K, V>> r = CollectionsFactory.getSet();
Iterator<ObjectObjectCursor<K,V>> it = internal.iterator();
while (it.hasNext()) {
final ObjectObjectCursor<K, V> c = it.next();
r.add(new Entry<K, V>() {
@Override
public K getKey() {
return c.key;
}
@Override
public V getValue() {
return c.value;
}
@Override
public V setValue(V value) {
System.out.println("Unsupported entrySet::entry::setValue() called on HPPCHashMap");
return value;
}
});
}
return r;
}
/*
* (non-Javadoc)
*
* @see java.util.Map#keySet()
*/
@Override
public Set<K> keySet() {
Set<K> r = CollectionsFactory.getSet();
for (K k : internal.keys) {
r.add(k);
}
return r;
}
/*
* (non-Javadoc)
*
* @see java.util.Map#clear()
*/
@Override
public void clear() {
internal.clear();
}
/*
* (non-Javadoc)
*
* @see java.util.Map#containsKey(java.lang.Object)
*/
@Override
public boolean containsKey(Object key) {
return internal.containsKey((K) key);
}
/*
* (non-Javadoc)
*
* @see java.util.Map#containsValue(java.lang.Object)
*/
@Override
public boolean containsValue(Object value) {
return internal.values().contains((V) value);
}
/*
* (non-Javadoc)
*
* @see java.util.Map#get(java.lang.Object)
*/
@Override
public V get(Object key) {
return internal.get((K) key);
}
/*
* (non-Javadoc)
*
* @see java.util.Map#isEmpty()
*/
@Override
public boolean isEmpty() {
return internal.isEmpty();
}
/*
* (non-Javadoc)
*
* @see java.util.Map#put(java.lang.Object, java.lang.Object)
*/
@Override
public V put(K key, V value) {
return internal.put((K) key, (V) value);
}
/*
* (non-Javadoc)
*
* @see java.util.Map#putAll(java.util.Map)
*/
@Override
public void putAll(Map<? extends K, ? extends V> m) {
for (Object k : m.keySet()) {
internal.put((K)k, m.get(k));
}
/*
for (java.util.Map.Entry<? extends K, ? extends V> e : m.entrySet()) {
internal.put(e.getKey(), e.getValue());
}
*/
}
/*
* (non-Javadoc)
*
* @see java.util.Map#remove(java.lang.Object)
*/
@Override
public V remove(Object key) {
return internal.remove((K) key);
}
/*
* (non-Javadoc)
*
* @see java.util.Map#size()
*/
@Override
public int size() {
return internal.size();
}
}